
// #include <stdio.h>     // 标准输入输出
// #include "ohos_init.h" // 用于初始化服务(services)和功能(features)

// // utils\native\lite\include\utils_file.h
// // utils\native\lite\file\src\file_impl_hal\file.c
// #include "utils_file.h" // 文件操作接口

// /**
//  * @brief 入口函数。如果文件不存在，则创建文件，写入内容。如果文件存在，则读取文件内容，删除文件。
//  * @return 无
//  */
// void test(void)
// {
//     // 定义文件名
//     char fileName[] = "wifiAccount";

//     // 获取文件大小，可以用来检查文件是否存在
//     int fileLen = 0;
//     // 失败返回-1
//     int ret = UtilsFileStat(fileName, &fileLen);

//     // 如果文件不存在，则创建文件，写入内容。
//     if (ret == -1)
//     {
//         // 输出文件不存在
//         printf("file %s not exist\n", fileName);

//         // 定义文件数据
//         // 格式: ssid,password
//         static const char dataWrite[] = "dragon,123456";

//         // 打开文件
//         // O_WRONLY_FS: write-only
//         // O_CREAT_FS: create file if not exist
//         // O_TRUNC_FS: clear file content if the file exists and can be opened in write mode
//         int fd = UtilsFileOpen(fileName, O_WRONLY_FS | O_CREAT_FS | O_TRUNC_FS, 0);
//         printf("file handle = %d\n", fd);

//         // 写入数据
//         ret = UtilsFileWrite(fd, dataWrite, strlen(dataWrite));
//         printf("write ret = %d\n", ret);

//         // 关闭文件
//         ret = UtilsFileClose(fd);
//     }
//     // 如果文件存在，则读取文件内容，删除文件。
//     else
//     {
//         // 输出文件存在
//         printf("file %s exist\n", fileName);

//         // 打开文件
//         // O_RDWR_FS：读写模式
//         int fd = UtilsFileOpen(fileName, O_RDWR_FS, 0);//返回文件描述符
//         printf("file handle = %d\n", fd);

//         // 重新定位文件读/写偏移量参数 fd 是之前打开的文件描述符，0 是要移动的偏移量，SEEK_SET_FS 表示相对于文件开头位置进行偏移。这行代码的作用是将文件指针移动到文件开头。
//         ret = UtilsFileSeek(fd, 0, SEEK_SET_FS);
//         printf("seek ret = %d\n", ret);

//         // 读取ssid数据 上面已经重新定位了fd的位置 下面从头开始读取6个字符
//         char ssid[64] = {0};
//         int readLen = UtilsFileRead(fd, ssid, 6);
//         printf("read len = %d : ssid = %s\n", readLen, ssid);

//         // 重新定位文件读/写偏移量 
//         //fd的位置到了第七个字符的位置
//         ret = UtilsFileSeek(fd, 7, SEEK_SET_FS);
//         printf("seek ret = %d\n", ret);

//         // 读取password数据
//         char password[64] = {0};
//         readLen = UtilsFileRead(fd, password, 6);
//         printf("read len = %d : password = %s\n", readLen, password);

//         // 关闭文件
//         ret = UtilsFileClose(fd);

//         // 获取文件大小
//         fileLen = 0;
//         ret = UtilsFileStat(fileName, &fileLen);
//         printf("file size = %d\n", fileLen);

//         // 删除文件（只是为了展示接口，实际开发中不应当删除）
//         ret = UtilsFileDelete(fileName);
//         printf("delete ret = %d\n", ret);
//     }
// }

// // 让test函数以“优先级2”在系统启动过程的“阶段8. application-layer feature”阶段执行。
// APP_FEATURE_INIT(test);

#include<stdio.h>
#include"ohos_init.h"
#include"utils_file.h"
//如果文件不存在就 创建文件写入内容 如果存在就读取后删除
void test(void)
{
    //定义文件名，就查有没有这个文件
    char fileName[]="Baijichuang";
    //通过查看文件的大小判断文件是否存在、
    int fileLen=0;
    int ret = UtilsFileStat(fileName,&fileLen);//文件存在返回文件的大小到fileLen 不存在返回-1
    //文件不存在
    if(ret==-1)
    {
        printf("file %s is not exist\n",fileName);
        //创建文件 写入数据用户名+密码 root123456
        static const char data[]="root123456";
        //O_WRONLY_FS:只有写操作
        //O_CREAT_FS:文件不存在就创建文件
        //O_TRUNC_FS:文件存在并且可以写操作打开就读取文件然后清除内容 0通常表示文件权限的初始值或者默认值
        int fd=UtilsFileOpen(fileName,O_WRONLY_FS|O_CREAT_FS|O_TRUNC_FS,0);//返回文件句柄就是标识符位置
        printf("fd = %d\n",fd);
        ret=UtilsFileWrite(fd,data,strlen(data));
        printf("write is %s\n",data);
        ret=UtilsFileClose(fd);
    }else{
        //文件存在 读取用户名输出 再读取密码输出
        printf("file is exist\n");
        int fd=UtilsFileOpen(fileName,O_RDWR_FS,0);//返回句柄
        printf("fd = %d\n",fd);
        //将句柄调到最开始位置
        UtilsFileSeek(fd,0,SEEK_SET_FS);//SEEK_SET_FS 表示将文件位置设置为相对于文件开头的偏移量 0表示偏移0位
        //fd移动到最开始位置了 然后开始读取用户名 root
        char user[100]={0};
        int len=UtilsFileRead(fd,user,4);//将fd句柄位置开始读 读4位到buf中 返回读取的长度
        printf("user is %s\n",user);
        //fd移动到密码前面
        UtilsFileSeek(fd,4,SEEK_SET_FS);
        printf("after read user fd is %d\n",fd);
        char pwd[10];
        UtilsFileRead(fd,pwd,6);
        printf("pwd is %s\n",pwd);
        UtilsFileClose(fd);
        //在看一眼文件大小
        ret=UtilsFileStat(fileName,&fileLen);
        printf("file size is %d\n",fileLen);
        //读取过了现在删除
        ret=UtilsFileDelete(fileName);
        printf("delete ret is %d\n",ret);
    }
}
// ohos_init.h中定义了以下8个宏，用于让一个函数以“优先级2”在系统启动过程的1-8阶段执行。
// 即：函数会被标记为入口，在系统启动过程的1-8阶段，以“优先级2”被调用。
// 优先级范围：0-4。
// 优先级顺序：0, 1, 2, 3, 4
// CORE_INIT()：          阶段1. core
// SYS_SERVICE_INIT()：   阶段2. core system service
// SYS_FEATURE_INIT()：   阶段3. core system feature
// SYS_RUN()：            阶段4. system startup
// SYSEX_SERVICE_INIT()： 阶段5. system service
// SYSEX_FEATURE_INIT()： 阶段6. system feature
// APP_SERVICE_INIT()：   阶段7. application-layer service
// APP_FEATURE_INIT()：   阶段8. application-layer feature
//宏让函数启动
APP_FEATURE_INIT(test);